package com.ruoyi.result.patents.domain;

import java.util.Date;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.system.domain.result_entity.Author;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 专利信息对象 result_patents
 *
 * @author ruoyi
 * @date 2025-01-14
 */
@Data
@TableName("result_patents") // 新增：指定对应的数据表名
public class ResultPatents extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    /** 主键，自动递增的专利ID */
    @Excel(name = "主键ID")
    private Long id; // 注意：数据库是int类型，Java用Long兼容

    /** 专利名称 */
    @Excel(name = "专利名称")
    @TableField("title") // 明确映射数据库字段
    private String title;

    /** 专利类型 */
    @Excel(name = "专利类型")
    @TableField("patent_type")
    private String patentType;

    /** 专利状态 */
    @Excel(name = "专利状态")
    @TableField("patent_status")
    private String patentStatus;

    /** 专利编号 */
    @Excel(name = "专利编号")
    @TableField("patent_number")
    private String patentNumber;

    /** 专利权人 */
    @Excel(name = "专利权人")
    @TableField("patent_owner")
    private String patentOwner;

    /** 授权公告日 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "授权公告日", width = 30, dateFormat = "yyyy-MM-dd")
    @TableField("authorization_date")
    private Date authorizationDate;

    /** 申请编号 */
    @Excel(name = "申请编号")
    @TableField("application_number")
    private String applicationNumber;

    /** 专利申请日 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    @Excel(name = "专利申请日", width = 30, dateFormat = "yyyy-MM-dd")
    @TableField("application_date")
    private Date applicationDate;

    /** 本人排名 */
    @Excel(name = "本人排名")
    @TableField("author_rank")
    private Integer authorRank; // 修正：数据库是int类型，Java用Integer更匹配

    /** 备注信息 */
    @Excel(name = "备注信息")
    @TableField("remarks")
    private String remarks;

    /** 关联课题 */
    @Excel(name = "关联课题")
    @TableField("project_id")
    private Integer projectId; // 修正：数据库是int类型，Java用Integer更匹配

    /** 作者信息 */
    @Excel(name = "作者信息")
    @TableField(value = "author_info", typeHandler = com.ruoyi.result.TypeHandler.ListTypeHandler.class)
    private List<Author> authorInfo; // 保留类型处理器，用于JSON字符串转List

    /** 成果同步 */
    @Excel(name = "成果同步")
    @TableField("sync_status")
    private String syncStatus;

    /** 创建时间 */
    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd")
    @TableField("created_at")
    private Date createdAt;

    /** 更新时间 */
    @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd")
    @TableField("updated_at")
    private Date updatedAt;

    /** PDF路径 */
    @Excel(name = "PDF路径")
    @TableField("pdf_url")
    private String pdfUrl;

    /** 关联用户ID */
    @Excel(name = "关联用户ID")
    @TableField("user_id")
    private Long userId;

    /** 软删除标识 */
    @TableField("is_deleted")
    private Integer isDeleted; // 修正：数据库是tinyint，Java用Integer匹配

    // 移除重复的setter/getter（Lombok的@Data已自动生成，避免冲突）

    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("title", getTitle()) // 修正：字段名统一为title
                .append("patentType", getPatentType())
                .append("patentStatus", getPatentStatus())
                .append("patentNumber", getPatentNumber())
                .append("patentOwner", getPatentOwner())
                .append("authorizationDate", getAuthorizationDate())
                .append("applicationNumber", getApplicationNumber())
                .append("applicationDate", getApplicationDate())
                .append("authorRank", getAuthorRank())
                .append("remarks", getRemarks())
                .append("projectId", getProjectId())
                .append("authorInfo", getAuthorInfo())
                .append("syncStatus", getSyncStatus())
                .append("createdAt", getCreatedAt())
                .append("updatedAt", getUpdatedAt())
                .append("pdfUrl", getPdfUrl())
                .append("userId", getUserId())
                .append("isDeleted", getIsDeleted())
                .toString();
    }
}

